package main

import (
	"log"
	"sync"
)

func main() {
	//1.建立对象
	//var pipe = sync.Pool{New: func() interface{} { return "Hello,BeiJing" }}
	var pipe = sync.Pool{New: func() interface{} { return 1 }}
	//2.准备放入的字符串
	val := "Hello,World!"
	//3. 放入
	pipe.Put(val)
	//4. 取出
	log.Println(pipe.Get())
	//5. 再取就没有了,会自动调用NEW
	log.Println(pipe.Get())
	log.Println(pipe.Get())
	log.Println(pipe.Get())
	log.Println(pipe.Get())
	//6.Pool没有手动回收函数,sync.Pool的回收是在系统自动GC的时候，触发pool.go中的poolCleanup函数
	//	func poolCleanup() {
	//	    for i, p := range allPools {
	//	        allPools[i] = nil
	//	        for i := 0; i < int(p.localSize); i++ {
	//	            l := indexLocal(p.local, i)
	//	            l.private = nil
	//	            for j := range l.shared {
	//	                l.shared[j] = nil
	//	            }
	//	            l.shared = nil
	//	        }
	//	        p.local = nil
	//	        p.localSize = 0
	//	    }
	//	    allPools = []*Pool{}
	//	}
}
